/**
 ******************************************************************************
 * @file           : bsp_wwdg_config.h
 * @brief          : WWDG Configuration File (STM32F4xx)
 ******************************************************************************
 * @attention
 *
 * 窗口看门狗配置文件
 * 提供精确时间窗口监控
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_WWDG_CONFIG_H
#define __BSP_WWDG_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define WWDG_USE_LOG     1

/* 根据配置自动定义日志宏 */
#if (WWDG_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "WWDG"
    #endif
    #include "elog.h"
    
#elif (WWDG_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* ============================================================================ */
/*                          看门狗配置（改这里）                                  */
/* ============================================================================ */

/**
 * @brief WWDG时钟分频
 * 
 * 可选值：1, 2, 4, 8（对应HAL库的WWDG_PRESCALER_1/2/4/8）
 * 分频后频率 = PCLK1 / 4096 / prescaler
 * 假设PCLK1=42MHz，则：
 *   - prescaler=1:  10.25kHz  -> 最小97us,  最大6.2ms
 *   - prescaler=2:  5.12kHz   -> 最小195us, 最大12.4ms
 *   - prescaler=4:  2.56kHz   -> 最小390us, 最大24.8ms
 *   - prescaler=8:  1.28kHz   -> 最小780us, 最大49.6ms
 */
#define WWDG_PRESCALER           4      /*!< 预分频系数 */

/**
 * @brief WWDG窗口值
 * 
 * 范围：0x40~0x7F (64~127)
 * 喂狗时计数器必须 > Window && < 127
 * 窗口越小，喂狗时机越严格
 */
#define WWDG_WINDOW_VALUE        0x50   /*!< 窗口值(推荐0x50=80) */

/**
 * @brief WWDG计数器初值
 * 
 * 范围：0x40~0x7F (64~127)
 * 超时时间 = (Counter - 0x3F) × prescaler × (1/PCLK1_freq × 4096)
 * 推荐：0x7F（最大值）
 */
#define WWDG_COUNTER_VALUE       0x7F   /*!< 计数器初值 */

/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_WWDG_CONFIG_H */
